#!/bin/bash

DIR=$(dirname `readlink -f $0`)
. $DIR/../testing.conf
. $DIR/function.sh

[ `id -u` -eq 0 ] || die "You must be root to run $0"
running_any $STRONGSWANHOSTS && die "Please stop test environment before running $0"

[ -n "$1" ] || die "$0 <image to mount: base|root|<guest>>"

check_commands partprobe qemu-nbd

load_qemu_nbd

mkdir -p $LOOPDIR
mkdir -p $IMGDIR
mkdir -p $SHAREDDIR

echo "Mounting image"

case "$1" in
base)
	[ -f "$BASEIMG" ] || die "Base image $BASEIMG not found"
	log_action "Connecting base image to NBD device $NBDEV"
	execute "qemu-nbd -c $NBDEV $BASEIMG"
	affected="root and guest"
	;;
root)
	[ -f "$ROOTIMG" ] || die "Root image $ROOTIMG not found"
	log_action "Connecting root image to NBD device $NBDEV"
	execute "qemu-nbd -c $NBDEV $ROOTIMG"
	affected="guest"
	;;
*)
	echo $STRONGSWANHOSTS | grep -q "\b$1\b" || die "Guest $1 not found"
	GUESTIMG="$IMGDIR/$1.$IMGEXT"
	[ -f "$GUESTIMG" ] || die "Guest image $GUESTIMG not found"
	log_action "Connecting guest image to NBD device $NBDEV"
	execute "qemu-nbd -c $NBDEV $GUESTIMG"
	;;
esac

do_on_exit qemu-nbd -d $NBDEV
partprobe $NBDEV

log_action "Mounting $NBDPARTITION to $LOOPDIR"
execute "mount $NBDPARTITION $LOOPDIR"
do_on_exit umount $LOOPDIR

log_action "Mounting proc filesystem to $LOOPDIR/proc"
execute "mount -t proc none $LOOPDIR/proc"
do_on_exit umount $LOOPDIR/proc

mkdir -p $LOOPDIR/root/shared
log_action "Mounting $SHAREDDIR as /root/shared"
execute "mount -o bind $SHAREDDIR $LOOPDIR/root/shared"
do_on_exit umount $LOOPDIR/root/shared

log_action "Copy /etc/resolv.conf"
execute "cp /etc/resolv.conf $LOOPDIR/etc/resolv.conf"
do_on_exit rm $LOOPDIR/etc/resolv.conf

if [ -n "$affected" ]; then
echo
echo "Rebuild the $affected images after making changes to this image!"
echo
fi

export debian_chroot="$1"
chroot $LOOPDIR /bin/bash -i
